package com.yunchang.open.iploaction.analyzer;

import com.yunchang.open.iploaction.Location;
import com.yunchang.open.iploaction.parser.IPv4Parser;
import com.yunchang.open.iploaction.utils.LocationUtil;

import java.util.List;

/**
 * 地区分析器。
 * 当IPLocationHelper添加多个IPv4Parser时，筛选最合适的地址作为结果返回。
 * Created by jasontujun on 2019/7/2.
 */
public interface LocationAnalyzer {

    /**
     * 给该解析器返回location打分。
     * 注意：地区分数越高，最有可能作为最终结果。
     * @param ip ip地址
     * @param parser ip解析器
     * @param location ip对应地区
     * @return 返回分数。分数为正数，分数越大，表示解析出的地区越完整。
     */
    int score(String ip, IPv4Parser parser, Location location);

    /**
     * 当location分数达到指定分数时，认为已经满足要求，可以作为最终结果返回，不再调用后续ip解析器。
     * 注意：ip解析器的调用顺序，是按照ip解析器的优先级依次调用；当某个ip解析器解析结果accept，则不再调用后续ip解析器。
     * @param ip ip地址
     * @param parser ip解析器
     * @param location ip对应地区
     * @param score ip地区的打分
     * @return 是否满足要求
     */
    boolean accept(String ip, IPv4Parser parser, Location location, int score);
}
